package com.yht.weblog.web.markdown;

import com.yht.weblog.web.markdown.renderer.ImageNodeRenderer;
import com.yht.weblog.web.markdown.renderer.LinkNodeRenderer;
import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
import org.commonmark.ext.image.attributes.ImageAttributesExtension;
import org.commonmark.ext.task.list.items.TaskListItemsExtension;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

import java.util.Arrays;
import java.util.List;

/**
 * @author: yht
 * @date: 2024/1/21 22:54
 * @description:
 **/
public class MarkdownHelper {
    /**
     * Markdown 转换为 HTML
     */
    private final static Parser PARSER;
    /**
     * HTML 转换为 Markdown
     */
    private final static HtmlRenderer HTML_RENDERER;
    /**
     * 静态代码块初始化
     */
    static {
        List<Extension> extensions = Arrays.asList(
                TablesExtension.create(), // 表格支持
                HeadingAnchorExtension.create(), // 标题锚点支持
                ImageAttributesExtension.create(), // 图片宽高支持
                TaskListItemsExtension.create() // 任务列表支持
        );

        // 创建解析器对象
        PARSER = Parser.builder().extensions(extensions).build();
        // 创建HTML渲染器对象
        HTML_RENDERER = HtmlRenderer.builder()
                .extensions(extensions)
                .nodeRendererFactory(context -> new ImageNodeRenderer(context))
                .nodeRendererFactory(context -> new LinkNodeRenderer(context))
                .build();

    }

    /**
     * 将Markdown转换为HTML格式
     * @param markdown 待转换的Markdown字符串
     * @return 转换后的HTML字符串
     */
    public static String convertMarkdown2Html(String markdown){
        // 解析Markdown字符串生成Markdown文档对象
        Node document = PARSER.parse(markdown);
        // 将Markdown文档对象渲染为HTML字符串
        return HTML_RENDERER.render(document);
    }


    public static void main(String[] args){
        // 定义一个字符串变量markdown并赋值为"This is *Sparta*"
        String markdown = "![图 1-1 技术栈](https://img.quanxiaoha.com/quanxiaoha/169560181378937 \"图 1-1 技术栈\"){width=100 height=100}";
        // 调用MarkdownHelper类的convertMarkdown2Html方法将markdown转换为HTML，并将结果打印到控制台
        System.out.println(MarkdownHelper.convertMarkdown2Html(markdown));
    }

}
